{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "%matplotlib inline\n",
    "\n",
    "import numpy as np\n",
    "import pandas as pd\n",
    "\n",
    "import matplotlib.pyplot as plt\n",
    "import seaborn as sns\n",
    "\n",
    "from collections import namedtuple, defaultdict, Counter"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "sns.set_context(\"poster\")\n",
    "sns.set_style(\"ticks\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "Tag = namedtuple(\"Tag\", [\"token\", \"tag\"])\n",
    "BEGIN_TAG = Tag(\"^\", \"<BOS>\")\n",
    "END_TAG = Tag(\"$\", \"<EOS>\")\n",
    "\n",
    "def load_sequences(filename, sep=\"\\t\", notypes=False, to_chars=False):\n",
    "    sequences = []\n",
    "    prev_char_tag = \"O\"\n",
    "    with open(filename) as fp:\n",
    "        seq = []\n",
    "        if to_chars:\n",
    "            seq = [BEGIN_TAG]\n",
    "        for line in fp:\n",
    "            line = line.strip()\n",
    "            if line:\n",
    "                line = line.split(sep)\n",
    "                if notypes:\n",
    "                    line[1] = line[1][0]\n",
    "                if not to_chars:\n",
    "                    seq.append(Tag(*line))\n",
    "                else:\n",
    "                    if line[1] == \"O\":\n",
    "                        # Take care of outside blocks\n",
    "                        t = \"O\"\n",
    "                        for l in line[0]:\n",
    "                            seq.append(Tag(l, t))\n",
    "                    # Take care of phrase blocks\n",
    "                    elif len(line[0]) == 1 and line[1][0] == \"U\":\n",
    "                        t = \"U%s\" % line[1][1:]\n",
    "                        seq.append(Tag(l, t))\n",
    "                    else:\n",
    "                        if line[1][0] in [\"B\", \"U\"]:\n",
    "                            # start with B\n",
    "                            t = \"%s%s\" % (\"B\", line[1][1:])\n",
    "                        else:\n",
    "                            # continue with inside\n",
    "                            t = \"%s%s\" % (\"I\", line[1][1:])\n",
    "                        seq.append(Tag(line[0][0], t))\n",
    "                        for l in line[0][1:-1]:\n",
    "                            t = \"%s%s\" % (\"I\", line[1][1:])\n",
    "                            seq.append(Tag(l, t))\n",
    "                        if line[1][0] in [\"U\", \"E\"]:\n",
    "                            t = \"%s%s\" % (\"E\", line[1][1:])\n",
    "                            seq.append(Tag(line[0][-1], t))\n",
    "                        else:\n",
    "                            t = \"%s%s\" % (\"I\", line[1][1:])\n",
    "                            seq.append(Tag(line[0][-1], t))\n",
    "                    if t[0] in [\"B\", \"I\"]:\n",
    "                        t = \"%s%s\" % (\"I\", line[1][1:])\n",
    "                        seq.append(Tag(\" \", t))\n",
    "                    else:\n",
    "                        t = \"O\"\n",
    "                        seq.append(Tag(\" \", t))\n",
    "            else:\n",
    "                if to_chars:\n",
    "                    seq.append(END_TAG)\n",
    "                sequences.append(seq)\n",
    "                seq = []\n",
    "                if to_chars:\n",
    "                    seq = [BEGIN_TAG]\n",
    "        if seq:\n",
    "            if to_chars:\n",
    "                seq.append(END_TAG)\n",
    "            sequences.append(seq)\n",
    "    return sequences\n",
    "    "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "train = load_sequences(\"data/cleaned/train.BIEOU.tsv\", to_chars=True, notypes=True)\n",
    "test = load_sequences(\"data/cleaned/dev.BIEOU.tsv\", to_chars=True, notypes=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.text.Text at 0x7f05d995a450>"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAxEAAAIrCAYAAACQ8RQZAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3XtcVXW+//H3RuQmOMfL1pBLSFhgahkxM6AYheOZLlPJ\nqTEdzzmBaKjMUE42Uhwh0hwdIjQbSQ+X4uiUJYaeMse0lDEaSRsnj81MdpRLVtooyGbDoLJ/f/hz\nn3agsGBz09fz8fDxiO/67u/6rGZi+d7r+11fk81mswkAAAAA2smlpwsAAAAA0LcQIgAAAAAYQogA\nAAAAYAghAgAAAIAhhAgAAAAAhhAiAAAAABhCiMBVLTU1VaGhoW3+CQsLU3l5uVPOeccddyg2NtYp\nYwHA1Wz27NkKDQ3V559/ftl+b7/9tkJDQ5WVldXusSsrKxUaGqr/+I//sLfddttt+ud//uc2P1tW\nVqbQ0FCtXLmy3ee7nPPnzys0NFQJCQlOGQ9wBteeLgDoST//+c81c+ZM+89nz57VQw89pBtvvFHP\nPPOMvr2NysiRI51yzpdeeskp4wDA1W7GjBkqLS3Va6+9pieffPKS/V577TX169dP06dP79T51q1b\nJxeXrv/+de7cuRo6dKieeeYZSVK/fv20adMmeXt7d/m5gfYiROCqNmLECI0YMcL+c1NTkyRpwIAB\nGj16dJecc9SoUV0yLgBcbWJiYuTn56eSkhI9/vjjcnNza9GnqqpK+/bt02233SY/P79One/666/v\n1Ofb4/z589q/f3+LJx433nhjl58bMILpTIABoaGhSklJ0euvv67o6GjNmjXLfuzQoUNKSkpSZGSk\nxowZozvuuEMLFy5UVVWVwxjfnc60aNEihYaG6u9//7syMzMVHR2t8ePH6/7779eOHTu67doAoK8x\nmUyaNm2azpw5o23btrXa57XXXpN04anFRVu3btX06dN1yy236KabbtKPf/xj5eTkyGq1XvZ8kyZN\navGX+zfeeEN33nmnxo4dq5iYGP3mN7+xfyH1Xa+88ori4uJ08803a/z48frJT36igoICnT9/XtKF\naVA33nij6urq9PrrryssLEy5ubmXnM70xz/+UbNmzdL3v/99jRkzRrfffrsWL16sEydO2PtcnJaV\nnZ2tPXv26Kc//anGjx+v6Ohopaamqq6u7rLXDFwKIQIw6Pjx4/rd736nFStWaNGiRZIufNP18MMP\nq7KyUhkZGSoqKtLs2bO1c+dOzZo1Sw0NDZccz2QyyWQyacGCBXJzc1NWVpaeffZZnT59WgsWLNDx\n48e769IAoM954IEH1L9/f23cuLHFsXPnzunNN9+Uv7+/Jk2aJOnC+oiFCxdq0KBBWrVqlfLy8nT7\n7bcrNzdX6enplz2XyWRy+Pntt99WWlqazGazVq5cqWeeeUZnzpxRVlZWi75r167Vs88+q7CwML30\n0kvKzc3V6NGjtXz5cr3wwguSpJtuukkvvviibDabJk+erE2bNumBBx5otZZdu3YpISFB9fX1yszM\nVGFhoRITE/XOO+9oxowZslgsDv3379+v3/zmN3r44Ye1du1a3X777dq8ebOys7Mv/y8YuASmMwEG\nHTp0SP/93/+t6667zt5WWVmpW2+9VbNnz1Z4eLgkafz48aqurlZ+fr4OHDigCRMmXHbcUaNG2UOJ\nJH399ddavny53n//fYdv0AAA/2fw4MH68Y9/rK1bt+rzzz93+N28c+dOffPNN3riiSfsbV999ZUm\nTZqk7OxseXh4SJJuvfVW/fGPf9S2bdv07LPPqn///u06d15enjw9PfXb3/7Wvl4hOjpas2fP1pEj\nRxz61tbWasqUKVq6dKm97dZbb1VpaalKSkr06KOPysvLyz7lddCgQfZptRefVHzb8uXL5ePjo/z8\nfHl5ednH8/Hx0RNPPKFXX31ViYmJ9v6HDx/Wjh07NHToUEkX7lHbtm3Tu+++22Z4AlrDkwjAIF9f\nX4eblCRNmDBBubm59gBxUVBQkCS162nClClTHH4ODAyUzWZTTU1N5woGgCvcz372M9lsNvvUpYs2\nbtwoDw8P/cu//Iu9LSEhQWvXrrUHiItGjhyp8+fP6+uvv27XOZuamvTpp59qzJgxLRY8T5kyxeHF\nHJK0cOFCrVq1yqGtX79+CgwM1FdffdWi/+V88cUXqqio0MSJE+0B4qI77rhDkvThhx86tN988832\nACFJrq6u8vX15R6DDuNJBGDQ4MGDW23fuHGjtmzZoiNHjqi2ttZ+QzCZTGpubm5z3G//cpdk/yas\nPZ8FgKvZTTfdpNGjRzsssP7iiy/0wQcf6P7779f3vvc9e1+LxaK8vDy9++67On78uOrr6+3HTCZT\nu/8y//e//13Nzc0aNmxYi2PDhw9v0fb1118rPz9f77//vk6cOOEwzfXieb87BepSvvrqK0kXvtT6\n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\nJSUpLy9PklRYWKiAgAC35wQGBiohIUE7duygibBIUVGRpmWsVtcwe6vm+Wl/oXr3T/ROKAAAALRL\nTTYRffr0+Z/LiouLJUnh4eFu4xERETpx4oQqKytVUlKibt26KTg4uN5zdu3a1ZLMaKGuYXb1CB/Y\nqjnOnDjknTAAAABot1p1d6aKigrZbDYFBQW5jYeEhEiqvdypoqJCnTp1qvfakJAQORyO1qweAAAA\nQBto8kyEP0pJSak3VlVV1QZJAMC/paWlqWPHjm5jubm5bZQGAHCpaNWZiNDQUBlj5HQ63cbLy8sl\nSV26dFFoaGiDZxzKy8vVpUuX1qweAAAAQBto1ZkIu90uqfazEdHR0a7xw4cPq3fv3goKCpLdbldZ\nWZkcDodCQ0PdnnPttde2aL0NHUU7cuSI6w5RAIBa2dnZ9T63BgBAa7XqTER8fLyCg4NVUFDgNv7J\nJ5/opptukiSNGDHCNVbH6XRq165drucAAAAAaD+aPBNRVlam6upqGWMk1TYAJ0+elCR1795dqamp\neu211xQVFaX+/fsrJydHx48f15QpUyTV3t1pwoQJWrx4scLCwhQWFqYlS5aoU6dOuueee3z4owEA\nAADwhSabiPT0dH3++eeux6tWrdLKlStls9m0detWTZ8+XcYYzZ07V6dPn1ZMTIxWrVrldvp87ty5\neuGFFzRr1iw5nU7Fx8crJyfH7fImAAAAAO1Dk03E6tWrm5wkPT290S+N69ixo5566ik99dRTnqUD\nAAAA4Hda9ZkIAAAAAJcfmggAAAAAHqGJAAAAAOARmggAAAAAHqGJAAAAAOARmggAAAAAHqGJAAAA\nAOARmggAgNdVV1crKytLt956q4YOHarbb79da9eudS2vqalRZmamRo0apdjYWKWkpKiwsLANEwMA\nPNHkl80BAOCpBQsW6IMPPtD8+fMVExOj7du3a/78+QoODlZKSooWL16s3NxcLViwQNdcc43+/ve/\n6+GHH9b69esVFRXV1vEBAE3gTAQAwKscDof+9re/KT09XWPHjlVERITuv/9+JSUlaePGjXI4HFqz\nZo1mzJih5ORkXXvttZo9e7aioqK0YsWKto4PAGgGzkQAALwqNDRUBQUFCgkJcRvv2bOnvvvuO+3e\nvVtVVVVKSkpyW56UlKS8vDwrowIAWogmws9VVlaqqKio1fPs2bPHC2kAoHm6devm9riyslKfffaZ\nbrzxRhUXF0uSwsPD3Z4TERGhEydOqLKyUsHBwZZlBQB4jibCzxUVFWlaxmp1DbO3ap6f9heqd/9E\n795KKHQAABVLSURBVIQCAA/NmzdP5eXleuihh/T+++/LZrMpKCjI7Tl1Zy4cDgdNBAD4OZqIdqBr\nmF09wge2ao4zJw55JwwAeCgjI0N5eXl66aWXFBER4ZN1pKSk1BurqqryyboAoL1KS0tTx44d3cZy\nc3NbNBdNBIDLWs35aq9d7peQkMAR9AvU1NRozpw52rx5s15++WWNHj1aUu1nJowxcjqdbp+bKC8v\nlyR16dKlTfICAJqPJgLAZc1RelTZuUfVteBMq+Y5c+KQXpknjRw50kvJ2r958+Zp27ZtWrFiheLj\n413jdrtdklRcXKzo6GjX+OHDh9W7d+96lzk1R0NH0o4cOaLk5GTPgwPAJSo7O7ve59FaiiYCwGXP\nG5cMwt1bb72l9evXa+XKlW4NhCTFx8crODhYBQUFbk3EJ598optuusnipNbhRhkALiU0EQAAr3I6\nncrMzNSdd94pu92ukydPui3v2bOnUlNT9dprrykqKkr9+/dXTk6Ojh8/rilTprRRat/jRhkALiU0\nEQAAr/rXv/6lM2fOaN26dVq3bp1r3Bgjm82mvXv3avr06TLGaO7cuTp9+rRiYmK0atUqr51m91fc\nKAPApYImAgDgVQkJCdq7d2+jz7HZbEpPT1d6erpFqQAA3hTQ1gEAAAAAtC80EQAAAAA8QhMBAAAA\nwCM0EQAAAAA8QhMBAAAAwCM0EQAAAAA8QhMBAAAAwCM0EQAAAAA8QhMBAAAAwCM0EQAAAAA8QhMB\nAAAAwCM0EQAAAAA8QhMBAAAAwCM0EQAAAAA8QhMBAAAAwCM0EQAAAAA8QhMBAAAAwCM0EQAAAAA8\nQhMBAAAAwCM0EQAAAAA8QhMBAAAAwCOBbR0AAAAA8Ac156u1Z88er8yVkJCg4OBgr8zlj2gifKSy\nslJFRUWtnsdbOzIAAAAa5yg9quzco+pacKZV85w5cUivzJNGjhzppWT+hybCR4qKijQtY7W6htlb\nNc9P+wvVu3+id0IBAACgUV3D7OoRPrCtY/g9mggf8sZOeObEIe+EAQAAALyED1YDAAAA8AhNBAAA\nAACP0EQAAAAA8AhNBAAAAACP0EQAAAAA8AhNBAAAAACP0EQAAAAA8AhNBAAAAACP0EQAAAAA8AhN\nBAAAAACP0EQAAAAA8EhgWwcAAMCfVVZWqqioqNXz7NmzxwtpAMA/0EQAANCIoqIiTctYra5h9lbN\n89P+QvXun+idUADQxmgiAABoQtcwu3qED2zVHGdOHPJOGADwA3wmAgAAAIBHaCIAAAAAeIQmAgAA\nAIBHaCIAAAAAeIQmAgAAAIBHaCIAAAAAeIQmAgAAAIBH+J6Ii/DNpAAAAEDjaCIuwjeTAgAAAI2j\niWgA30wKAAAA/G+WfyYiJydHY8aMUWxsrMaNG6dNmzZZHQEA4CeoCQDQPll6JmLNmjXKzMzUs88+\nqyFDhig/P1+PPfaYfvGLX2jEiBFWRgEAtDFqAgC0X5Y2EcuXL9e9996r8ePHS5LsdruKioqUnZ1N\nwQDQrtWcr/baDRUSEhIUHBzslbn8GTUBANovy5qIAwcO6NixY0pKSnIbT0pK0oIFC1RVVaWOHTta\nFQcAvMpRelTZuUfVteBMq+Y5c+KQXpknjRw50kvJ/JOVNWHm4/MVFBzS4teX/eeoFDzEK1kAXB4u\nhwNLljURxcXFstls6tOnj9t4RESEampqVFJSon79+lkVBwC8zhs3ZbhcWFkTnP83XNUh3Vv8+v/8\nsEod/K9+A/Bjl8OBJcuaiIqKCklSSIj70aC6xw6HwyvrWfSXlxTSObTFrz9SclhSlFeyAAAaZlVN\nAIC2cqkfWGqXt3hNSUmpN/bzzz9Lkv61r1iBHYNaPPfxH4t1vtM5nf+5dQWsorRY5lwl8zAP8/hg\nHn/M5K15HKVHdPJkjI4cOdKqef79739LkqZOnaqgIPffibm5ua2a2x81VheqS7ZIHVt+KiHgnENl\nP33nN/sI8zAP81w+8/hzTbAZY0yrUjVTfn6+0tLStHHjRvXv37/e+HvvvdfsU9cNFYt9+/apurra\na3kB4FJgt9vVuXNntzF/aCK8WRMk6gIANIc3a4JlZyL69u0rY4yKi4vdCsahQ4cUGBioyMjIZs/V\n0A87fvx4nT17VsuXL1eHDh28krk10tLSJEnZ2dltnKQWeRpHnsb5Wx7J/zL5W56pU6fq3Llz2rBh\ng19+IM+bNUGiLrQEeRpHnsaRp3H+lscXNcGyJsJutysiIkIFBQVKTk52jefn5ysxMVFXXHFFq+YP\nCAhQ586d1bdv39ZG9Yq6u4qEh4e3cZJa5GkceRrnb3kk/8vkb3mCgoIUFBTklw2E5PuaIFEXmkKe\nxpGnceRpnL/l8UVNsPQzETNmzNDTTz+tIUOGaNiwYXrvvfe0a9curVmzxsoYAAA/QE0AgPbL0iai\n7tRyVlaWjh8/LrvdrmXLlmnw4MFWxgAA+AFqAgC0X5bfnWnSpEmaNGmS1asFAPghagIAtE+W3Z0J\nAAAAwKUhoK0DAAAAAGhfaCIAAAAAeIQmAgAAAIBHaCIAAAAAeIQmAgAAAIBHaCIAAAAAeIQmAgAA\nAIBHaCIAAAAAeIQmAgAAAIBHaCIAAAAAeOSSaCJycnI0ZswYxcbGaty4cdq0aZNl666urlZWVpZu\nvfVWDR06VLfffrvWrl3rWl5TU6PMzEyNGjVKsbGxSklJUWFhoSXZHA6HRo4cqeTk5DbN8+WXX2rS\npEkaPHiwRo4cqczMTBlj2iRP3ft12223KS4uTqNHj1ZWVpaqqqosyWOM0dKlSxUTE6OsrCy3Zc1Z\n99mzZ/XMM88oMTFRcXFxmjx5sr799luf5HE4HPrzn/+s5ORkDR06VCkpKfrwww/bLM+FfvzxRw0d\nOlT333+/T/M0J9P27ds1YcIExcXFKTk5WTk5OT7N1NR7tnDhQt1yyy2KjY3V2LFj9eabb/o0j7+i\nLtTnLzVBoi5ciLrQ8jwXsqouUBPcV96uvfnmmyY2NtasX7/eHDx40OTk5JiYmBjz6aefWrL+jIwM\nM2zYMPPRRx+Z4uJi8/rrr5vo6Gjz7rvvGmOMef75582vfvUrs2XLFnPgwAHz4osvmkGDBpn9+/f7\nPNv8+fPNoEGDzM033+waszrP/v37zZAhQ0x2drY5cuSI+eCDD8yQIUPMq6++2iZ5Fi5caBISEszH\nH39sSkpKzMcff2yuv/5689xzz/k8T2lpqZkyZYoZO3asGThwoHn55Zfdljdn3TNnzjRjxowxO3fu\nNPv37zdPPPGEGTZsmPnPf/7j9TypqakmOTnZ7Nixwxw+fNi8+OKLZsCAAaawsLBN8lxo6tSpZtCg\nQea+++5zG/dmnuZk2rlzp4mLizNvv/22OXr0qFm7dq257rrrzKZNm3ySqak8M2bMMKNHjzY7d+40\nJSUl5t133zUDBw40q1ev9kkef0VdaJg/1ARjqAsXoi60Ls+FrKgL1AR37b6JGDVqlFm0aJHb2IwZ\nM8zkyZN9vu7y8nIzcOBA88Ybb7iNT5kyxTzwwAOmvLzcxMXF1Vs+fvx4M2fOHJ9m+/rrr83gwYPN\nnDlzXAWjLfLMnj3bzJo1y21sx44dZs+ePW2SZ/jw4fX2l4ULF5oRI0b4PE9OTo6ZOnWqKS8vN7Gx\nsW7/2Zuz7h9++MEMGDDAbN261bW8urraJCUlNfqLtSV59u/fb6Kjo93WZYwxt956q/nTn/5keZ4L\nbd682QwfPtz8/ve/dysWBw8e9Gqe5mS65557zF/+8he3sS1btrgKvLczNZanoqLCREdH19uHZsyY\nYe6++25jjPffM39FXajPX2qCMdSFC1EXWp7nQlbVBWqCu3Z9OdOBAwd07NgxJSUluY0nJSVp9+7d\nrlORvhIaGqqCggLdfffdbuM9e/bUqVOnXBkayrdjxw6f5aqpqVFGRoZSU1PVp08f1/gXX3xhaR5j\njP7xj3/oN7/5Tb31xcXFtcn2sdlsCghw3+2vuOIKSfJ5njFjxig7O1uhoaH1ljVn3YWFhQoICHB7\nTmBgoBISElqUr7E8UVFR+vTTT3XjjTe6jdft21bnqeN0OrVgwQI9/vjj6ty5s9uynTt3ejVPU5lK\nS0u1Z88e/frXv3YbT05OVlRUlE8yNWcbXbx/d+zYUTabTZL33zN/RF2oz19qgkRduBh1oeV56lhZ\nF6gJF83tcWI/UlxcLJvN5vZLUZIiIiJUU1OjkpISn2fo1q2bgoKCXI8rKyv12WefafDgwSouLpYk\nhYeH18t34sQJVVZW+iTT6tWr5XQ6NXXqVLfxuu1hVZ4jR47I6XQqODhYs2bN0ogRI3TLLbfojTfe\nkKQ22T733nuvNm7cqG+++UaStH//fuXl5WnixIk+z3Pxfnqh5qy7pKRE3bp1U3BwcL3nHD582Kt5\nJKlHjx7q0KGD6/GJEyf0z3/+U0OGDJEky/NI0pIlSxQZGakJEybUW+btPE1l2rdvn6TaP9BSU1OV\nmJhY79p7K7dRSEiIxo8fr7Vr1+rgwYOSpM8//1z5+fmaOHGiT/L4I+pCff5SEyTqwsWoC63LI1lb\nF6gJ7gI9TuxHKioqJNVuqAvVPXY4HJZnmjdvnsrLy/XQQw/p/fffl81mcysmF+e7+I1rrWPHjmnp\n0qVatmyZ60hKnYqKCkvznDp1SsYYLVy4UA8++KCmTZum/Px8Pf/88zp79qwkWb590tPTVVpaqrvu\nukuBgYE6d+6cJk6cqPT0dL366quW56nTnPemoqJCnTp1qvfakJAQn+/r58+f1+OPP64uXbpo0qRJ\nrsxW5vn222/1zjvvKDc3t8HlVucpLS2VMUZz587V7373O82ePVsbN27Uo48+KkkaN26c5ZmeffZZ\n/eEPf9Btt92mwMBA1dTUaNasWRo/frwk67dRW6AuuPOnmiBRFzxBXWiaP9WFy7EmtOsmwt9kZGQo\nLy9PL730kiIiItokw4IFCzRmzBgNHz68TdZ/oerqaknSb3/7W91zzz2SpOjoaB04cECrV6/W5MmT\nLc+0fPlyffDBB3r++ecVHR2tffv26bnnnmuwE0etqqoqzZw5U19//bVWrVqlLl26WJ7BGKOMjAw9\n+OCDuuaaayxff0POnTsnSXrggQc0btw4SdJ1112nb775Rq+//rprzErz58/Xd999p6ysLIWHh+vL\nL7/U4sWL1b17d911112W50Hb1wV/qgkSdeFSQV2o73KsCe26iajbaS/uluoeN3aNmDfV1NRozpw5\n2rx5s15++WWNHj3atX5jjJxOp9tRsfLyckny+n+67du3q6ioyO3Umfn/t8xrizx11yZed911buPx\n8fHKy8tz5bMqT1lZmZYuXaonn3xSd9xxhyRpwIABqqys1Lx585SWlmZpngs1570JDQ1t8MhAeXm5\nz7JVVlZq2rRp2rt3r1atWqW4uDi3zFblWbNmjRwOh9LS0v7nc6zePp07d5bNZmtw/3799dctz7Rv\n3z69/fbbWr58uUaNGiWp9o+zY8eOafHixbrrrrvaZB+yGnXhv/ytJkjUBU9QFxrnb3XhcqwJ7bqJ\n6Nu3r4wxKi4uVv/+/V3jhw4dUmBgoCIjIy3JMW/ePG3btk0rVqxQfHy8a9xut0uqva4xOjraNX74\n8GH17t273inK1tq8ebPKyso0cuRI11hNTY2MMRo0aJCmT59uaZ7IyEgFBATo9OnTbuM1NTWSan9R\n171/VuQpLi7WuXPn6h2x6Nu3r86fP+864mRVngs1Z1+x2+0qKyuTw+Fw+0Po8OHDuvbaa72eqe60\n54EDB7R27dp667Ayz+bNm1VcXKyhQ4e65avbtxcsWGD59rHb7TLGqKyszG28pqbGtX4rM/3www+y\n2WwN7t9nzpzRqVOnLN9GbYG68F/+VhMk6oInqAuN87e6cDnWhHb9wWq73a6IiAgVFBS4jefn5ysx\nMbHe9Z++8NZbb2n9+vXKzs52KxRSbfcZHBxcL98nn3yim266yetZHnnkEW3cuFEbNmxw/Zs4caKu\nvPJKbdiwQRMmTLA0T0hIiH75y19q+/btbuNffPGFIiMjlZSUpE6dOlmW56qrrpJU+8fEhQ4cOCCp\n9vS6ldvnQs3ZV0aMGOEaq+N0OrVr1y6f5FuyZIm++uor5eTkNPjLxMo8ixYtctuvN2zYoJtvvlmx\nsbHasGGDkpOTLd8+/fr109VXX61t27a5je/evVsDBgyQZO02uuqqq2SMaXD/Dg4OVrdu3SzfRm2B\nuvBf/lYTJOqCJ6gLjfO3unA51oR2fSZCkmbMmKGnn35aQ4YM0bBhw/Tee+9p165dWrNmjc/X7XQ6\nlZmZqTvvvFN2u10nT550W96zZ0+lpqbqtddeU1RUlPr376+cnBwdP35cU6ZM8XqeXr16qVevXm5j\nPXr0UGBgoPr16ydJluaRat+f1NRULV++XLfddpu2bdumDz/8UHPnzlVQUJClecLCwjR27FgtW7ZM\nPXv21IABA/T999/rlVde0Q033KBevXr5NE9ZWZmqq6tdlxM4nU7XPtO9e/cm192nTx9NmDBBixcv\nVlhYmMLCwrRkyRJ16tTJdW2xt/L8/PPPWrlypWbOnKmuXbu67dsBAQHq3r27pXl69+5d7zZ1Xbt2\nVXl5uWvfDg0N9WqepjJ1795d6enpysjIUL9+/XT99dcrNzdXX375pVauXCnJ2vcsLi5OsbGxWrhw\noZ555hmFh4frq6++0rp161yXaXg7j7+iLtTyx5ogURcuRF1oeZ62qAvUBHc2c+EFku3UunXrtGLF\nCh0/flx2u12PPvpovfsY+0JRUVG9r1eXaq/ntNls2rt3r4wxWrZsmd555x2dPn1aMTExeuKJJzR4\n8GCf55OkrKwsrV+/Xlu3bnVlszrPli1btHTpUh06dEi9evVSWlqa7rzzzjbJc/bsWWVlZSkvL0+l\npaXq3r27xo4dq0ceeUSdO3f2aZ777rtPn3/+udtY3b6ydetW9e7du8l1V1VV6YUXXtD7778vp9Op\n+Ph4Pfnkky06DdpYnvT0dGVlZTX4uquvvtq1P1mVZ+vWrbr66qvdlj3xxBM6evSo69aQ3s7T3Exv\nvfWWVq5cqR9//FGRkZF67LHH3I7gWLmNOnXqpMzMTG3dulVnzpzRlVdeqTvuuEPTp09XYGCg1/P4\nM+pCw/yhJkjUhTrUhZbnaYu6QE1wd0k0EQAAAACs064/EwEAAADAejQRAAAAADxCEwEAAADAIzQR\nAAAAADxCEwEAAADAIzQRAAAAADxCEwEAAADAIzQRAAAAADxCEwEAAADAI/8Pm5a3GFdri2cAAAAA\nSUVORK5CYII=\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f0610415bd0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig, ax = plt.subplots(1,2)\n",
    "ax[0].hist([len(seq) for seq in train], bins=range(0,180,10))\n",
    "ax[1].hist([len(seq) for seq in test], bins=range(0,180,10))\n",
    "ax[0].set_title(\"Train\")\n",
    "ax[1].set_title(\"Validation\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "['<BOS>', '<EOS>', 'B', 'E', 'I', 'O']"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "labels = sorted(Counter(t.tag for seq in train for t in seq).keys(), key=lambda x: x.split(\"-\")[-1])\n",
    "labels"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'<BOS>': 1, '<EOS>': 2, 'B': 3, 'E': 4, 'I': 5, 'MASK': 0, 'O': 6}"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "labels = [\"MASK\"] + labels\n",
    "label2id = {l: i for i, l in enumerate(labels)}\n",
    "label2id"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Modeling"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 43,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "from keras.preprocessing import sequence\n",
    "from keras.models import Sequential, Model\n",
    "from keras.layers import Dense, Dropout, Embedding, LSTM, Input, TimeDistributed, Merge, merge\n",
    "from keras.callbacks import TensorBoard, ModelCheckpoint"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "CHAR_INPUT_DIM=127 + 1\n",
    "CHAR_EMBED=50\n",
    "MAXLENGTH=150\n",
    "NUM_LABELS=len(label2id)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "('X_train shape:', (2395, 150))\n",
      "('X_test shape:', (1001, 150))\n"
     ]
    }
   ],
   "source": [
    "X_train = sequence.pad_sequences([[ord(t.token) for t in seq] for seq in train], maxlen=MAXLENGTH)\n",
    "X_test = sequence.pad_sequences([[ord(t.token) for t in seq] for seq in test], maxlen=MAXLENGTH)\n",
    "print('X_train shape:', X_train.shape)\n",
    "print('X_test shape:', X_test.shape)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "('y_train shape:', (2395, 150, 1))\n",
      "('y_test shape:', (1001, 150, 1))\n",
      "('train_sample_weight shape:', (2395, 150))\n",
      "('test_sample_weight shape:', (1001, 150))\n"
     ]
    }
   ],
   "source": [
    "Y_train = sequence.pad_sequences([[label2id[t.tag] for t in seq] for seq in train], maxlen=MAXLENGTH)\n",
    "Y_test = sequence.pad_sequences([[label2id[t.tag] for t in seq] for seq in test], maxlen=MAXLENGTH)\n",
    "\n",
    "train_sample_weight = Y_train != 0\n",
    "test_sample_weight = Y_test != 0\n",
    "\n",
    "Y_train = np.expand_dims(Y_train, -1)\n",
    "Y_test = np.expand_dims(Y_test, -1)\n",
    "\n",
    "\n",
    "print('y_train shape:', Y_train.shape)\n",
    "print('y_test shape:', Y_test.shape)\n",
    "\n",
    "print('train_sample_weight shape:', train_sample_weight.shape)\n",
    "print('test_sample_weight shape:', test_sample_weight.shape)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 41,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "num_layers=3\n",
    "lstm_units=32\n",
    "\n",
    "input_layer = Input(shape=(MAXLENGTH,), dtype='int32')\n",
    "emb = Embedding(input_dim=CHAR_INPUT_DIM, output_dim=CHAR_EMBED,\n",
    "                           input_length=MAXLENGTH, mask_zero=True)(input_layer)\n",
    "# apply forwards LSTM\n",
    "forward_lstms = []\n",
    "prev_layer = emb\n",
    "for i in xrange(num_layers):\n",
    "    fw_lstm = LSTM(lstm_units, return_sequences=True)(prev_layer)\n",
    "    prev_layer = fw_lstm\n",
    "    forward_lstms.append(fw_lstm)\n",
    "\n",
    "# apply backwards LSTM\n",
    "backward_lstms = []\n",
    "prev_layer = emb\n",
    "for i in xrange(num_layers):\n",
    "    bw_lstm = LSTM(lstm_units, return_sequences=True, go_backwards=True)(prev_layer)\n",
    "    prev_layer = bw_lstm\n",
    "    backward_lstms.append(bw_lstm)\n",
    "\n",
    "merged_layer = merge([fw_lstm, bw_lstm], mode=\"concat\")\n",
    "dropout = Dropout(p=0.5)(merged_layer)\n",
    "dense = TimeDistributed(Dense(128, activation='tanh'))(dropout)\n",
    "out = TimeDistributed(Dense(NUM_LABELS, activation='softmax'))(dense)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 44,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "model = Model(input=input_layer, output=out)\n",
    "model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', sample_weight_mode=\"temporal\",  metrics=['accuracy'])\n",
    "tb_callback = TensorBoard(log_dir='./tb_logs', histogram_freq=0, write_graph=True)\n",
    "mc_callback = ModelCheckpoint(\"models/LSTM3.hdf5\", monitor='val_loss', save_best_only=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "model.fit(X_train, Y_train, nb_epoch=50,\n",
    "          sample_weight=train_sample_weight,\n",
    "         validation_data=(X_test, Y_test, test_sample_weight),\n",
    "         callbacks=[tb_callback, mc_callback])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 46,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "['acc', 'loss', 'val_acc', 'val_loss']"
      ]
     },
     "execution_count": 46,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "model.history.history.keys()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 47,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.legend.Legend at 0x7f02e9129390>"
      ]
     },
     "execution_count": 47,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\nV3Xq1CnzvevUqaPIyEhfQyzm66+/Vl5eXrF99evXV61atfz6PlVVaVXDXR1PTpZC/Pi1ndUq3XVX\nyWJln3xizLG2uvmXK5jWoQaAQKJtBoDgRqKNUtWsWVO/+93vtHHjxhLHdu/erWPHjmno0KGSpPff\nf1933HGHOnbsqK5du2rMmDE6ePCg23snJiYWG56WkZGhQYMGqWPHjho8eLDS09NLXOPpPXbs2KG7\n7rpLkjEkbfTo0ZKk3r17Fxuetm/fPo0ePVqdO3dWp06dNHz4cO3YscN53DGM7siRI7rvvvvUuXNn\n9enTR8uXL/f+g6uESqsafs89ro+//bZUWOi/OC5ckJYscT30e/x4ozp4MFQNBwCz0DZXn7YZQOVE\nog2vDB06VFlZWfr0ksWQ33nnHTVu3Fi9evXSoUOH9NBDD6lXr15677339MYbbyg0NFRJSUm6cOGC\ny/sWHZr2ww8/aOLEiYqOjtbatWs1e/Zspaam6vz5885zSnuP66+/XtOnT5dkDEl77rnnSrxPVlaW\n7rvvPtWpU0dvvvmm1qxZo9atW2vcuHEl/vB44oknNGbMGL3zzjvq27evnnrqKe3fv9+3DzNIeVM1\nPC0t8POrJSNxdlQCZx1qAHCNtrnqt80AKi8S7Yq0cqXUrp10+eWl/5SVN/e8/HLj/VeuLPPtr7/+\nerVo0ULr16937issLNR7772nIUOGyGq1qkWLFtqwYYOSk5N1+eWX64orrtDIkSP13//+V4cPHy71\nPd577z3l5eVp9uzZuuKKK9SpUyf99a9/1c8//+w8p7T3CA0NdQ53q1+/vsuhb6tWrdKFCxf05JNP\nql27drriiis0Z84c1a9fXyuLfDYWi0UJCQnq3bu3oqKi9Ic//EF2u11fffVVmT+/YFR0DWvJu6rh\nvrBapeuv9+7c+HjvlttiHWoAPqNt9oi2GQDKh2JoFenpp6XMzMDc+3//8/68BQuMcbdlFBcXp1de\neUUzZsxQWFiYtm3bpnPnzjmHpoWHh+vrr7/WX/7yFx0+fFg///yz7L9WrTp37lyp9//222/1m9/8\nRvXr13fua9OmjSIiIpyvfX0PyRia1q5dO9WsWdO5z2q16pprrtG+ffuKnXvttdc6txs0aFCm9wlW\nO3aUXMP69tuNpbD8wdPSWpIxBN1TQl+0mBkABBxts0e0zQBQPvRoV6QpU6Qrr5SaNSv9p6y8uWez\n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\nZ2dnl7jmzJkz2rx5s7p27aqFCxfq1KlTmjVrlkaOHKl33nlHVqtVdrtdf/3rXzV69GhFR0fr5MmT\ngX+YKs7bpbv69JEeecQ4f80a92s0v/mmMb/b1dJSjkQ4UMcd3FXc9nR99+5Sx46en691a/dfSlit\n0ogR0ooV7o+XNrR7/PjSYyjtGQGgOrDZjH+PO3bki0YAQMWrVMt7FRYWqmbNmpo/f76zwFl4eLhG\njRql7du3q3fv3nr99dd1/vx5TZgwwS/vGR8fX2Kfq2HtVVVZlu7atMlIUn1JdCvqeGnKk4hL3iXC\nycneJcruePtlAoDKZcKECSWmQa1Zs8akaKoGm83499ZR9wIAgIpiWqIdGRkpqWTPteN17dq1S1xT\nq1YtRUVFFasiHhMTI4vFogMHDqh9+/Z6/vnn9fzzzyv017G/9mCoblWJlWXproICI/FzzCuuyr2p\nnp7PX73uvsQAADCsWWP8e8sXkgCAimRaot2qVSvZ7XYdPXpUbdu2de4/fPiwQkJC1LJlS5fX/Pjj\nj8X22Ww22e121a5dW5988omys7M1btw4Z4Jtt9tlt9t1yy23qGvXrnrllVfKFKer3oTjx4+rX79+\nZbpPZeVYusubZDs01EgaYQh0rzuAqiUlJUUtWrQwO4wqp+iXwAAAVBTTEu3o6GhFRUUpPT29WNK6\nbds29ejRw9kjXVSvXr00a9YsnT171ll5fPfu3bJYLGrXrp2uvPJKXXvttcWu+fLLLzVt2jT9/e9/\nd5m8w7PwcGnoUO+WlXJUywYAIFjwJTAAwAymVR2XpOTkZK1evVrr1q3TiRMnlJqaqp07dyo5OVmS\n9Mwzz2jMmDHO8wcPHqxmzZpp0qRJ+uabb/TZZ59pxowZiomJUZcuXVS7dm21adOm2E+LFi1kt9vV\nqlWrEhXO4R1vl5VyVy0bAACz8CUwAMAMphZDi4uLU25urhYvXqyTJ08qOjpaS5YsUadOnSRJp0+f\n1vHjx53nh4WFafny5Zo9e7YSEhJktVrVv39/TZs2zeP7WCpqAeQqyrGslKdq2qVVywYAVC3Lly/X\n66+/rqysLLVs2VJ//OMfNWjQIJfn3nvvvdq1a5fLYxMnTtTEiRMDEiNfAgMAzGJ61fHExEQlJia6\nPDZv3rwS+5o0aaJFixZ5ff+uXbvq66+/Lnd8MIwfL/3nP9Jzz13cV9Zq2QCAqiEtLU0LFy7UzJkz\n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\nSROzwguI7t2NdbLdJdsWi5SSEoSrhTh6tU+elH780dxYAADl5lWi3a1bN7399ttKSEiQJI0cOVL3\n3sNcoAUAACAASURBVHuvvvvuO2VkZKh79+564oknAhlnULNag7SxBgBA0r333quUlBR169ZNf/vb\n3zRgwABd8WtF6/Xr1+v555/X4MGDTY7S/8aPlzIypISEknO2mzWTRo0yJy6PKIgGAFWC1+toX3nl\nlbryyislGUPMpk2bpmnTpgUssMogNFS6807pT38iyQYABK877rhD9evX1yeffKJGjRoVW5Lz2LFj\nuuOOO/THP/6xTPdcvny5Xn/9dWVlZally5b64x//qEGDBrk8d/HixVq8eLEsFovsRYZSR0REaPfu\n3eV7KC91724svZmXZxQsveMOKT1dOnFCeustacSIgL592V06T5s/MACgUvIq0b7xxhv1wgsvqGPH\njoGOp1LZu1f67W/NjgIAgNL17dtXffv2LbF/4sSJZb5XWlqaFi5cqJkzZ+q6667Ttm3bNGXKFNWr\nV089e/Z0eU2zZs20evXqYom2xWIp83uXV3i41Lix9Pjj0sCBxr5586Thw0ufy12hivZoM08bACot\nr5qWpk2baj//2JcQFmZ2BAAAeGfjxo369NNPna8zMjJ0zz33aPDgwVq2bFmZ7pWamqoRI0YoLi5O\n0dHRuu+++9S3b1+PS4RZrVY1aNBADRs2dP40cBT+qkC33CLFxBjbe/dKGzdWeAiescQXAFQJXvVo\nP/jgg1q0aJH27dunrl27qkGDBgoJKXmpY5kQAAAQPFauXKkZM2Zo5syZkozh4hMmTFDDhg111VVX\nadGiRbrssst0zz33lHqvQ4cOKSsrS7GxscX2x8bGas6cOcrPz1dYEH8TbbFIjz1mDCGXpDlzpMGD\njf1B4be/lUJCpMJC5mgDQCXmVaI9duxYSdKePXv01ltvlThut9tlsVj09ddf+zc6AADgs7S0NI0d\nO1Z33nmnJCPxtlgsWrlypZo0aaKXX35Zb731lleJ9tGjR2WxWNS8efNi+6OiomSz2XTs2DFnobVg\nFRdndBzv3y/t3Clt3Sq5GFVvjtBQ6YorjCT7m2+MhNtF5wYAILh59S/33LlzK3QeFQAA8J9jx46p\nd+/eztcffvihYmNjnUt6de7cWYsXL/bqXjk5OZKMQmZFOV5nZ2e7vC43N1dPPPGEduzYoZ9++kkx\n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\natasWcrNzdWqVas0dOhQPfzww9q8eXOdz2nbtq02b97sclu7dm3142vXrtWDDz6oQYMG6d1331V+\nfr6++uorjR07NhAfCQCAJs/T6/e2bduUlZWlnj17avny5Xruuee0bds2TfBl1RkAAIKIqVPHCwoK\nNGLECKWnp0uSkpOTtXXrVuXn56tfv361PiciIkLnnntuna+5atUqde3aVaNGjZIkJSUlafz48crN\nzdV3332niy++2PcfBACAMOLp9fv111/XpZdeqkceeaT6+PHjx+uhhx7SDz/8oAsuuCCg8QMA4G+m\njWjv2rVLBw4cUFpamsv+tLQ0bdu2TadOnWrU61osFjVr1sxlX+R/67tb7A3aAABAozTm+j19+nS9\n+uqrLvvOO+88SdLhw4f9FywAACYxLdEuKSmRxWJRu3btXPYnJSXJarVq3759jXrdYcOG6euvv9aa\nNWt0+vRp/fzzz3rttdfUp08fXXTRRb4IHQCAsNWY63dMTIxat27tsm/9+vWKjY3VJZdc4td4AQAw\ng2mJ9rFjxyRJLVu2dNlvv19RUVHr806cOKHJkyfrpptuUmpqqnJzc7V3797qx1NTUzV16lQ9+uij\n6tGjh1JTU1VZWakXXnjBT58EAIDw0djrt7Pi4mK98cYbys7OVlRUlO+DBADAZCHV3qtly5Zq2bKl\nOnfurJEjR+qHH37QrFmzlJmZqTVr1qh169YqLi7WlClTNG7cOF177bX66aefNHv2bOXm5mrRokUe\nTx/PyMiosa+yslKS9MMPP/jkcwEAwpf9WnLfffcp+qzyp0VFRWaE5Fcff/yxcnJydNNNN2n06NGN\neg2uzQAAf/LFtdm0RDsuLk5SzW++7fdjY2NrPGfUqFHVRc4kqWPHjurUqZOuvfZaLV68WNnZ2Zo5\nc6auueYalyrjSUlJuvHGG7V+/XoNGDDA69jtI+h33nmn168FAIAknT59usbFPBg15vptt379ek2Y\nMEGDBg3S1KlTfRoX12YAgK95c202LdHu0KGDbDabSkpK1KlTp+r9e/bsUfPmzdW+fXu3XicxMVGt\nWrWq7pP93Xff6Ve/+pXLMUlJSbJYLC5TzN1V2zcW6enpOnHihAoKCmoUXoN7srOzJUn5+fkmRxK6\nOIfe4xx6j3Povfvuu0+nT5/WO++8o5iYGLPDaVBjr99bt27VAw88oDvvvFOPPvqoVzFwbfYP/j17\n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\nnOemBwAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f03a9fd0ed0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig, ax = plt.subplots(1,2 ,figsize=(16,8))\n",
    "\n",
    "\n",
    "ax[0].plot(model.history.epoch, model.history.history[\"acc\"], \"-bo\", label=\"Train\")\n",
    "ax[0].plot(model.history.epoch, model.history.history[\"val_acc\"], \"-rs\", label=\"Validation\")\n",
    "ax[0].set_xlabel(\"Epoch\")\n",
    "ax[0].set_ylabel(\"Accuracy\")\n",
    "ax[0].legend(loc=\"upper left\")\n",
    "\n",
    "ax[1].plot(model.history.epoch, model.history.history[\"loss\"], \"-bo\", label=\"Train\")\n",
    "ax[1].plot(model.history.epoch, model.history.history[\"val_loss\"], \"-rs\", label=\"Validation\")\n",
    "ax[1].set_xlabel(\"Epoch\")\n",
    "ax[1].set_ylabel(\"Loss\")\n",
    "ax[1].legend(loc=\"upper left\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 48,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "predictions = model.predict(X_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 49,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([1, 1, 1, 1, 1, 1, 1, 1, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,\n",
       "       6, 6, 6, 6, 6, 6, 3, 5, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,\n",
       "       6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 3, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 6,\n",
       "       6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,\n",
       "       6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,\n",
       "       6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 5, 5, 5, 6, 5, 5,\n",
       "       5, 5, 5, 6, 6, 6, 6, 6, 6, 6, 6, 2])"
      ]
     },
     "execution_count": 49,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "predictions.argmax(axis=-1)[1]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 50,
   "metadata": {
    "collapsed": false,
    "scrolled": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([0, 0, 0, 0, 0, 0, 0, 1, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,\n",
       "       6, 6, 6, 6, 6, 6, 3, 4, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,\n",
       "       6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 3, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 4, 6,\n",
       "       6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,\n",
       "       6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,\n",
       "       6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 3, 5, 5, 5, 5, 5, 5, 5, 5,\n",
       "       5, 5, 4, 6, 6, 6, 6, 6, 6, 6, 6, 2], dtype=int32)"
      ]
     },
     "execution_count": 50,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "Y_train[1].flatten()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 51,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([False, False, False, False, False, False, False,  True,  True,\n",
       "        True,  True,  True,  True,  True,  True,  True,  True,  True,\n",
       "        True,  True,  True,  True,  True,  True,  True,  True,  True,\n",
       "        True,  True,  True, False,  True,  True,  True,  True,  True,\n",
       "        True,  True,  True,  True,  True,  True,  True,  True,  True,\n",
       "        True,  True,  True,  True,  True,  True,  True,  True,  True,\n",
       "        True,  True,  True,  True,  True,  True,  True,  True, False,\n",
       "       False, False, False, False, False,  True,  True,  True,  True,\n",
       "        True,  True,  True,  True,  True,  True,  True,  True,  True,\n",
       "        True,  True,  True,  True,  True,  True,  True,  True,  True,\n",
       "        True,  True,  True,  True,  True,  True,  True,  True,  True,\n",
       "        True,  True,  True,  True,  True,  True,  True,  True,  True,\n",
       "        True,  True,  True,  True,  True,  True,  True,  True,  True,\n",
       "        True,  True,  True,  True,  True,  True,  True,  True,  True,\n",
       "        True,  True,  True, False, False, False,  True,  True,  True,\n",
       "       False,  True,  True,  True,  True, False,  True,  True,  True,\n",
       "        True,  True,  True,  True,  True,  True], dtype=bool)"
      ]
     },
     "execution_count": 51,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "predictions.argmax(axis=-1)[1] == Y_train[1].flatten()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 52,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "predictions_val = model.predict(X_test)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 53,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n",
       "       1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,\n",
       "       6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,\n",
       "       6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,\n",
       "       6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,\n",
       "       6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,\n",
       "       6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 2])"
      ]
     },
     "execution_count": 53,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "predictions_val.argmax(axis=-1)[0]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 54,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n",
       "       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,\n",
       "       6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,\n",
       "       6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,\n",
       "       6, 6, 6, 6, 6, 6, 3, 5, 5, 5, 5, 4, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,\n",
       "       6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,\n",
       "       6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 2], dtype=int32)"
      ]
     },
     "execution_count": 54,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "Y_test[0].flatten()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 62,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "from sklearn.metrics import classification_report, confusion_matrix"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 72,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[     0, 111872,    196,      0,      0,      0,   2342],\n",
       "       [     0,   2330,      0,      0,      0,      0,      0],\n",
       "       [     0,      0,   2394,      0,      0,      0,      1],\n",
       "       [     0,      0,      0,    436,      0,     12,   1049],\n",
       "       [     0,      0,      0,      0,      0,    754,    734],\n",
       "       [     0,      0,      0,     27,      0,   5126,   6135],\n",
       "       [     0,      0,     21,    241,      0,   2105, 223475]])"
      ]
     },
     "execution_count": 72,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "confusion_matrix(Y_train.flatten(),\n",
    "                            predictions.argmax(axis=-1).flatten(),\n",
    "                labels=range(len(labels)))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 74,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[  2330,      0,      0,      0,      0,      0],\n",
       "       [     0,   2394,      0,      0,      0,      1],\n",
       "       [     0,      0,    436,      0,     12,   1049],\n",
       "       [     0,      0,      0,      0,    754,    734],\n",
       "       [     0,      0,     27,      0,   5126,   6135],\n",
       "       [     0,     21,    241,      0,   2105, 223475]])"
      ]
     },
     "execution_count": 74,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "confusion_matrix(Y_train.flatten()[Y_train.flatten() != 0],\n",
    "                            predictions.argmax(axis=-1).flatten()[Y_train.flatten() != 0],\n",
    "                labels=range(1,len(labels)))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 77,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "             precision    recall  f1-score   support\n",
      "\n",
      "      <BOS>       1.00      1.00      1.00      2330\n",
      "      <EOS>       0.99      1.00      1.00      2395\n",
      "          B       0.62      0.29      0.40      1497\n",
      "          E       0.00      0.00      0.00      1488\n",
      "          I       0.64      0.45      0.53     11288\n",
      "          O       0.97      0.99      0.98    225842\n",
      "\n",
      "avg / total       0.94      0.95      0.95    244840\n",
      "\n"
     ]
    }
   ],
   "source": [
    "print classification_report(Y_train.flatten()[Y_train.flatten() != 0],\n",
    "                            predictions.argmax(axis=-1).flatten()[Y_train.flatten() != 0],\n",
    "                labels=range(1,len(labels)), target_names=labels[1:])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 78,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>&lt;BOS&gt;</th>\n",
       "      <th>&lt;EOS&gt;</th>\n",
       "      <th>B</th>\n",
       "      <th>E</th>\n",
       "      <th>I</th>\n",
       "      <th>O</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>&lt;BOS&gt;</th>\n",
       "      <td>2330</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>&lt;EOS&gt;</th>\n",
       "      <td>0</td>\n",
       "      <td>2394</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>B</th>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>436</td>\n",
       "      <td>0</td>\n",
       "      <td>12</td>\n",
       "      <td>1049</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>E</th>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>754</td>\n",
       "      <td>734</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>I</th>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>27</td>\n",
       "      <td>0</td>\n",
       "      <td>5126</td>\n",
       "      <td>6135</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>O</th>\n",
       "      <td>0</td>\n",
       "      <td>21</td>\n",
       "      <td>241</td>\n",
       "      <td>0</td>\n",
       "      <td>2105</td>\n",
       "      <td>223475</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "       <BOS>  <EOS>    B  E     I       O\n",
       "<BOS>   2330      0    0  0     0       0\n",
       "<EOS>      0   2394    0  0     0       1\n",
       "B          0      0  436  0    12    1049\n",
       "E          0      0    0  0   754     734\n",
       "I          0      0   27  0  5126    6135\n",
       "O          0     21  241  0  2105  223475"
      ]
     },
     "execution_count": 78,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_cfr = confusion_matrix(Y_train.flatten()[Y_train.flatten() != 0],\n",
    "                            predictions.argmax(axis=-1).flatten()[Y_train.flatten() != 0],\n",
    "                labels=range(1,len(labels)))\n",
    "\n",
    "df_cfr = pd.DataFrame(df_cfr, index=labels[1:], columns=labels[1:])\n",
    "df_cfr"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 80,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.axes._subplots.AxesSubplot at 0x7f02e9246250>"
      ]
     },
     "execution_count": 80,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n1saNG7V06VK1atXKXI+MjFTnzp01aNAgTZw4Ue+//74Xq8S1hpnm/19BQYHS0tLUu3dvTZ061SXJ\nvFxxcbEkmQ3X2bNn9f777yshIcGlabugRo0aGjNmjD7//HMdO3ZMknT+/HlJ0s8//1zi+OnTp2v6\n9OmSfk+Jli1bpu7du+vVV1/V8ePH/9gf1AeV5d5fjnvvu4qKihQYGKjw8HBvlwLgGrNkyRL16dPH\npWG+ICQkROPHj9e3336rf/3rX16oDteqSt805+Tk6OWXX1b37t313nvv6aGHHtKGDRt01113WR7/\n448/6rXXXtOtt96qjh07SpL27t2rs2fPql27dle8zp133qni4mLt3LlTkhQbGytJGjVqlFavXq1T\np05ZnhcVFaW1a9fqtdde0759+9SrVy899dRT2r179x/5Y/uEst57K9x73+N0OrVnzx6lpaVpyJAh\nCgkJ8XZJAK4hx48f148//uj2936nTp0UFBR0xXl/4GpU2vGMkydPasaMGfriiy/Uvn17JSUlqVu3\nbiWO++2339SmTRs5nU4VFxfr3Llzatasmd58800FBPz+d44TJ05I+v3/JX0lkZGRCggIUG5uriSp\nWbNmSkpK0ksvvaTnn39ektSkSRN17dpVAwcOVMOGDV3O79q1q7p27arvvvtOixYtUkJCglq0aKHn\nn39erVu3Lpd7UlGu5t5fyjAMTZ8+Xffddx/33kds375dt99+u6Tfk/yioiLdfffdGj9+vJcrqxwu\nvf+XMgxDH330kW688UYvVAV4xoXf5e5+7wcHB6tOnTrmsUB5qLRN8//93/9p/fr1mjFjhuLj4694\nXFBQkNasWWO+z8/P17p169S/f3/Nnz9f7du3N7/8ERwcfMXPOXfunIqLi81GW5L69Omju+++W1u2\nbNG2bdu0detWLVq0SGlpaZo+fbplXc2bN9fLL7+shIQEjRkzRps3b/a7xu1q7/2latWqJUncex8R\nExOjV155RdLvYxnHjh3T22+/rQceeEDLli1j3tbDLr3/l6tTp04FVwN41oXf+0FB7luYs2fPuvze\nB/6oSts0N2rUSD169NDUqVP1wQcfKDExUXfeeaflsVFRUS7/HBMTo+zsbL366qtavny5IiIi5HQ6\nlZOT43LspS7M017+N+Pg4GB1795d3bt3lyTt379fTz/9tGbMmKHevXuXeFTav//9by1atEjr1q1T\ny5Yt1aVLl6u9BV5ztffeCvfeN1SpUsXl/kdHR6tt27bq3r27Fi5cqIkTJ3qxumvf5fcfuJZd+F2e\nk5NzxWMcDofy8/PdptFAWVXav4LVrl1bs2fP1v/8z//olltu0cSJE3XfffdpxYoVcjgctuffcsst\n2r9/vySpRYsWCg8P18aNG694/Pbt2xUUFKT27dtL+n3us6CgoMRxzZo101NPPaWzZ88qOzvbXP/y\nyy81atQoPfjgg+Yzid99912/TDr/6L2/FPfed4WEhKhRo0bm/04AoDzUrl1bjRo1UmZm5hWPycrK\nkiTzu0dAeai0TfMFkZGRmjRpkjIzMzVw4EC99dZbuuuuu7Rhwwa35x04cEB169aV9HtzMGTIEC1f\nvlwHDx4sceypU6c0f/589evXTzfccIMkKT4+/orzntnZ2TIMQ3Xq1NGRI0fUr18/PfPMM2rRooU+\n//xzvf7665bfGPY3V3vvL8W9913nz5/X4cOHmacFUO5Gjhyp9evX66uvvirxs3Pnzun1119Xu3bt\nSmxCBvwRlXY843JhYWEaNmyYhg0bpi+++EJFRUXmz/Ly8sx//uWXX/TRRx/piy++0D/+8Q9zfdy4\ncdqzZ4+GDRumcePGKTY2VoGBgdqzZ4/mzJmjGjVqaPLkyebxjz76qCZMmKDx48dr6NChioyM1K+/\n/qotW7bozTff1IABA1SrVi3l5+dr0KBB6t+//zW7SUFp7/3latasqYCAAO69Dzh//rz535XT6dSJ\nEye0YMECnTt3TiNHjvRucZXApff/cgEBAcyU45ozcOBA7dixQ4899pgeeeQR9ejRw9zc5J///Kd+\n/vlnzZkzx9tl4hpjOK22kIKk37dyTklJcVmrXr26mjRpolGjRqlXr14uPysqKtK7776r1atXm1s5\nN2jQQH379tWIESMUGhrqcvzOnTuVlpamvXv3Ki8vT8HBwWratKkeeOABDRgwoFLvLmV17y9wOp3m\nUwEaNWokiXvvTcOGDTMf5yf9/iWdmjVrqk2bNnrsscd08803e7G6a9/l9/9ytWrV0ubNmyuwosop\nOTlZ8+bN0969e71dSqXy4Ycfavny5fruu+907tw5RUZG6p577tHo0aPNvRSA8kLTDAAAANio9DPN\nAAAAgB2aZgAAAMAGTTMAAABgg6YZAAAAsEHTDAAAANigaQYAAABs0DQDAAAANmiaAQAAABs0zQAA\nAICN/w/n2vwddU49mgAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f0189e74090>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "sns.heatmap(df_cfr.divide(df_cfr.sum()))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 81,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>&lt;BOS&gt;</th>\n",
       "      <th>&lt;EOS&gt;</th>\n",
       "      <th>B</th>\n",
       "      <th>E</th>\n",
       "      <th>I</th>\n",
       "      <th>O</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>&lt;BOS&gt;</th>\n",
       "      <td>991</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>&lt;EOS&gt;</th>\n",
       "      <td>0</td>\n",
       "      <td>1001</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>B</th>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>134</td>\n",
       "      <td>0</td>\n",
       "      <td>15</td>\n",
       "      <td>515</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>E</th>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>268</td>\n",
       "      <td>386</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>I</th>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>10</td>\n",
       "      <td>0</td>\n",
       "      <td>1750</td>\n",
       "      <td>3598</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>O</th>\n",
       "      <td>0</td>\n",
       "      <td>11</td>\n",
       "      <td>175</td>\n",
       "      <td>0</td>\n",
       "      <td>2168</td>\n",
       "      <td>85894</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "       <BOS>  <EOS>    B  E     I      O\n",
       "<BOS>    991      0    0  0     0      0\n",
       "<EOS>      0   1001    0  0     0      0\n",
       "B          0      0  134  0    15    515\n",
       "E          0      0    0  0   268    386\n",
       "I          0      0   10  0  1750   3598\n",
       "O          0     11  175  0  2168  85894"
      ]
     },
     "execution_count": 81,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_cfr = confusion_matrix(Y_test.flatten()[Y_test.flatten() != 0],\n",
    "                            predictions_val.argmax(axis=-1).flatten()[Y_test.flatten() != 0],\n",
    "                labels=range(1,len(labels)))\n",
    "\n",
    "df_cfr = pd.DataFrame(df_cfr, index=labels[1:], columns=labels[1:])\n",
    "df_cfr"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 82,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.axes._subplots.AxesSubplot at 0x7f02e9175710>"
      ]
     },
     "execution_count": 82,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\nvpEkffvtt8rKylJCQoKqV6/u9Z/fl+zu/aVw730vJCTE7X+ryMhIHTlyRP/5n/+p/Px8Eh8vu/j+\nA5XdokWLtHHjRr311ltq27atuR4VFaVu3bpp6NChevzxx7VixQofVonKhpnm/6+goEDp6enq16+f\npk6d6pZkXqy4uFiSzIbrzJkzWrFihRITE92atvNq1aql++67T5988omOHj0qSTp37pwk6ccffyxx\n/PTp0zV9+nRJv6ZES5cuVa9evfTSSy/p2LFjv+8H9UNlufcX4977r6KiIgUFBSkiIsLXpQCoZBYv\nXqz+/fu7NcznhYaGauLEifr666/1z3/+0wfVobKq8k1zTk6OXnjhBfXq1UvvvPOO7rnnHm3YsEE3\n33yz5fHff/+9Xn75ZV133XXq0qWLJGnPnj06c+aMOnbseMnr3HTTTSouLtaOHTskSXFxcZKkMWPG\naPXq1Tp58qTledHR0Vq7dq1efvll7d27V3379tUjjzyiXbt2/Z4f2y+U9d5b4d77H5fLpd27dys9\nPV3Dhw9XaGior0sCUIkcO3ZM33//vcff+127dlVwcPAl5/2By1FlxzNOnDihGTNm6NNPP1WnTp2U\nnJysnj17ljjul19+Ufv27eVyuVRcXKyzZ8+qZcuWeu211+Rw/PpnjuPHj0v69T9JX0pUVJQcDody\nc3MlSS1btlRycrKee+45Pf3005Kk5s2bq0ePHhoyZIiaNGnidn6PHj3Uo0cPffPNN1q4cKESExPV\nunVrPf3002rXrl253JOKcjn3/rcMw9D06dN1++23c+/9xLZt23TDDTdI+jXJLyoq0i233KKJEyf6\nuLKq4bf3/7cMw9D777+vq666ygdVAd5x/ne5p9/7ISEhql+/vnksUB6qbNP8f//3f1q/fr1mzJih\nhISESx4XHBysNWvWmF/n5+dr3bp1GjRokObNm6dOnTqZH/4ICQm55PucPXtWxcXFZqMtSf3799ct\nt9yizz//XFu3btWWLVu0cOFCpaena/r06ZZ1tWrVSi+88IISExN13333afPmzQHXuF3uvf+tOnXq\nSBL33k/ExsbqxRdflPTrWMbRo0f1xhtv6M4779TSpUuZt/Wy397/i9WvX7+CqwG86/zv/eBgzy3M\nmTNn3H7vA79XlW2amzZtqt69e2vq1Kl69913lZSUpJtuusny2OjoaLe/j42NVXZ2tl566SUtW7ZM\nkZGRcrlcysnJcTv2t87P0178J+OQkBD16tVLvXr1kiTt27dPjz32mGbMmKF+/fqVeFTav/71Ly1c\nuFDr1q1TmzZt1L1798u9BT5zuffeCvfeP1SrVs3t/sfExKhDhw7q1auXFixYoMcff9yH1VV+F99/\noDI7/7s8Jyfnksc4nU7l5+d7TKOBsqqyfwSrV6+eZs6cqf/+7//Wtddeq8cff1y33367li9fLqfT\naXv+tddeq3379kmSWrdurYiICG3cuPGSx2/btk3BwcHq1KmTpF/nPgsKCkoc17JlSz3yyCM6c+aM\nsrOzzfXPPvtMY8aM0V133WU+k/jtt98OyKTz99773+Le+6/Q0FA1bdrU/PcEAMpDvXr11LRpU2Vm\nZl7ymKysLEkyP3sElIcq2zSfFxUVpUmTJikzM1NDhgzR66+/rptvvlkbNmzweN7+/fvVoEEDSb82\nB8OHD9eyZct04MCBEseePHlS8+bN08CBA1W3bl1JUkJCwiXnPbOzs2UYhurXr6/Dhw9r4MCBeuKJ\nJ9S6dWt98skneuWVVyw/MRxoLvfe/xb33n+dO3dOhw4dYp4WQLkbPXq01q9fry+++KLE986ePatX\nXnlFHTt2LLEJGfB7VNnxjIuFh4dr5MiRGjlypD799FMVFRWZ38vLyzP//qefftL777+vTz/9VH//\n+9/N9fHjx2v37t0aOXKkxo8fr7i4OAUFBWn37t2aNWuWatWqpcmTJ5vHP/DAA3r00Uc1ceJEjRgx\nQlFRUfr555/1+eef67XXXtPgwYNVp04d5efna+jQoRo0aFCl3aSgtPf+YrVr15bD4eDe+4Fz586Z\n/1u5XC4dP35c8+fP19mzZzV69GjfFlcF/Pb+X8zhcDBTjkpnyJAh2r59ux588EHdf//96t27t7m5\nyT/+8Q/9+OOPmjVrlq/LRCVjuKy2kIKkX7dyTk1NdVurWbOmmjdvrjFjxqhv375u3ysqKtLbb7+t\n1atXm1s5N27cWAMGDNDdd9+tsLAwt+N37Nih9PR07dmzR3l5eQoJCVGLFi105513avDgwVV6dymr\ne3+ey+UynwrQtGlTSdx7Xxo5cqT5OD/p1w/p1K5dW+3bt9eDDz6oa665xofVVX4X3/+L1alTR5s3\nb67Aiqqm2bNna+7cudqzZ4+vS6lS3nvvPS1btkzffPONzp49q6ioKN16660aO3asuZcCUF5omgEA\nAAAbVX6mGQAAALBD0wwAAADYoGkGAAAAbNA0AwAAADZomgEAAAAbNM0AAACADZpmAAAAwAZNMwAA\nAGCDphkAAACw8f8ATl0VIog5MKYAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f0189db5610>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "sns.heatmap(df_cfr.divide(df_cfr.sum()))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 86,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<BOS>      991\n",
       "<EOS>     1001\n",
       "B          664\n",
       "E          654\n",
       "I         5358\n",
       "O        88248\n",
       "dtype: int64"
      ]
     },
     "execution_count": 86,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_cfr.sum(axis=1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 92,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.axes._subplots.AxesSubplot at 0x7f02e8159550>"
      ]
     },
     "execution_count": 92,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n4DFOp1OFhYUe02igomrsH8GioqI0c+ZM/e///q+uuuoqPfroo7rlllu0fPlyOZ1O2/Ovuuoq7dmz\nR5LUpk0bRUREaMOGDRc8ftu2bQoODlanTp0k/T73WVRUVOa4Vq1a6eGHH9bJkyeVm5trrn/66aca\nPXq0br/9dvOZxG+99VZAJp1/9N6fi3vvv0JDQ9WsWTPz3xMAqAxRUVFq1qyZcnJyLnjM9u3bJcn8\n7hFQGWps03xGTEyMJk6cqJycHA0ePFivvfaabrjhBq1fv97jed9//70aNmwo6ffmYNiwYVq2bJn2\n7t1b5thjx47p1Vdf1YABA3TZZZdJklJSUi4475mbmyvDMNSgQQMdOHBAAwYM0GOPPaY2bdpo7dq1\neumllyy/MRxoLvben4t7779Onz6t/fv3M08LoNKNHDlS69at02effVbmZ6dOndJLL72khISEMpuQ\nAX9EjR3POF94eLhGjBihESNG6JNPPlFJSYn5s4KCAvPvf/nlF73//vv65JNP9Pe//91cHzdunHbt\n2qURI0Zo3LhxSkxMVFBQkHbt2qVZs2apbt26mjRpknn8fffdpwkTJmj8+PEaPny4YmJi9Ouvv2rz\n5s165ZVXNGjQINWvX1+FhYUaMmSIBg4cWG03KSjvvT9fvXr15HA4uPd+4PTp0+b/Vi6XS0eOHNG8\nefN06tQpjRw50rfF1QDn3v/zORwOZspR7QwePFg7duzQ/fffr3vvvVe9evUyNzf5xz/+oZ9//lmz\nZs3ydZmoZgyX1RZSkPT7Vs4ZGRlua5GRkWrRooVGjx6tPn36uP2spKREb731llauXGlu5dykSRP1\n799fd955p8LCwtyO37lzpxYtWqTdu3eroKBAISEhatmypW677TYNGjSoRu8uZXXvz3C5XOZTAZo1\nayaJe+9LI0aMMB/nJ/3+JZ169erp2muv1f33368rr7zSh9VVf+ff//PVr19fmzZtqsKKaqbZs2dr\n7ty52r17t69LqVHee+89LVu2TN9++61OnTqlmJgY3XTTTRozZoy5lwJQWWiaAQAAABs1fqYZAAAA\nsEPTDAAAANigaQYAAABs0DQDAAAANmiaAQAAABs0zQAAAIANmmYAAADABk0zAAAAYIOmGQAAALDx\n/wOYMu42WpufGQAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f02e81d1510>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "sns.heatmap(df_cfr.divide(df_cfr.sum(axis=1), axis=0))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 115,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "def write_predictions(data, y_true, y_pred, labels, filename):\n",
    "    with open(filename, \"wb+\") as fp:\n",
    "        for i, seq in enumerate(data):\n",
    "            y = y_pred[i, (y_true[i, :]!= 0).flatten()]\n",
    "            for t, pred in zip(seq, y):\n",
    "                print_line = \"%s\\t%s\\t%s\" % (t.token, t.tag, labels[pred])\n",
    "                if t.token == \" \":\n",
    "                    print_line = \"%s\\t%s\\t%s\" % (\"<space>\", t.tag, labels[pred])\n",
    "                print >> fp, print_line\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 117,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "write_predictions(test, Y_test, predictions_val.argmax(axis=-1), labels, \"dev_notypes.char.tsv\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 2",
   "language": "python",
   "name": "python2"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 2
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython2",
   "version": "2.7.12"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 1
}
